// function Sprite(img_file, ancho, alto, numFrames) {
function Sprite(img_file, rectEstadoNormal, rectPremio, rectPremioConseguido) {
	this.contextoMovimiento = canvasMovimiento.getContext("2d");
	this.imagen = new Image();
	var that = this;
	this.imagen.onload = function(){ 
		that.is_ready = true;
	}
	this.imagen.src = img_file;
	this.rectEstadoNormal = rectEstadoNormal;
	this.rectPremio = rectPremio;
	this.rectPremioConseguido = rectPremioConseguido;
	this.incrementoFrame = 1;
	this.frame = 0;
	this.numFrames = rectEstadoNormal.numImgs;
	this.paso = 0;
	this.posX = 800;
	this.posY = 10;
	this.incrementoFrame = 1;	
	this.estado = SPRITE_ESTADO_NORMAL;
	this.posYMin = MAX_ALTO;
	
	this.actualizarEstado = function() {
		if (this.estado == SPRITE_ESTADO_NORMAL) {
			this.posX = this.posX - 2;
			if (this.posX < -this.rectEstadoNormal.ancho)
				this.posX = 800;
		}			
		else if (this.estado == SPRITE_PREMIO_CAYENDO) {
			this.posY = this.posY + 8;
			if (this.posY >= this.posYMin) {
				this.estado = SPRITE_PREMIO_QUIETO;
				this.posY = this.posYMin;
			}
		}
	}
	
	this.drawImage = function(contexto) {
		if(this.is_ready){
			switch (this.estado) {
				case SPRITE_ESTADO_NORMAL:
						this.contextoMovimiento.drawImage(this.imagen, this.frame * this.rectEstadoNormal.ancho, 0, this.rectEstadoNormal.ancho, this.rectEstadoNormal.alto, this.posX, this.posY, this.rectEstadoNormal.ancho, this.rectEstadoNormal.alto);
						//this.contextoMovimiento.drawImage(this.imagen, this.rectEstadoNormal.x + this.frame * this.rectEstadoNormal.ancho, this.rectEstadoNormal.y, this.rectEstadoNormal.ancho, this.rectEstadoNormal.alto, this.posX, this.posY, this.rectEstadoNormal.ancho, this.rectEstadoNormal.alto);
						this.paso = (this.paso + 1)% 3;
						if (this.paso == 0)
							this.frame = this.frame + this.incrementoFrame;
						if (this.frame == this.numFrames - 1)
							this.incrementoFrame = -1;
						if (this.frame < 1) 
							this.incrementoFrame = 1;
					break;	
				case SPRITE_PREMIO_CAYENDO:
						this.contextoMovimiento.drawImage(this.imagen, this.rectPremio.x, this.rectPremio.y, this.rectPremio.ancho, this.rectPremio.alto, this.posX, this.posY, this.rectPremio.ancho, this.rectPremio.alto);						
					break;
				case SPRITE_PREMIO_QUIETO:
						this.contextoMovimiento.drawImage(this.imagen, this.rectPremio.x, this.rectPremio.y, this.rectPremio.ancho, this.rectPremio.alto, this.posX, this.posY, this.rectPremio.ancho, this.rectPremio.alto);
					break;
				case SPRITE_PREMIO_CONSEGUIDO:
						// TODO De vez en cuando excepción aquí						
						this.contextoMovimiento.drawImage(this.imagen, 
							this.rectPremioConseguido.x + this.frame * this.rectPremioConseguido.ancho, this.rectPremioConseguido.y, 
							this.rectPremioConseguido.ancho, this.rectPremioConseguido.alto, 
							this.posX, this.posY, this.rectPremioConseguido.ancho, this.rectPremioConseguido.alto);
						this.paso = (this.paso + 1)% 4;
						if (this.paso == 0)
							this.frame = this.frame + 1;
						if (this.frame == this.rectPremioConseguido.numImgs) {
							// if (this.loop)
							this.estado = SPRITE_ESTADO_NORMAL;
							this.frame = 0;
							this.posX = 800;
							this.posY = 10;	
						}							
					break;
			}
		}
	}	
	
	this.setEstado = function(estado) {		
		if (this.estado == SPRITE_ESTADO_NORMAL && estado == SPRITE_PREMIO_CAYENDO) {
			if (SONIDO)
				sonidoPajaro.play();
			this.posYMin = pantalla.getMinY(this.posX, this.posX + this.rectPremio.ancho) - this.rectPremio.alto;
		}
		else if (estado == SPRITE_PREMIO_CONSEGUIDO) {
			if (SONIDO)
				sonidoPremio.play();
			this.frame = 0;
			this.paso = 0;
		}
		this.estado = estado;
	}
		
	this.getRectanguloColision = function() {
		//if (this.estado == SPRITE_ESTADO_NORMAL)
		return new Rectangulo(this.posX, this.posY, this.rectEstadoNormal.ancho, this.rectEstadoNormal.alto);
	}
}

function Flecha(archivoImg, rectanguloIzq, rectanguloDer, angulo, posX, posY, estado) {
	this.contextoMovimiento = canvasMovimiento.getContext("2d");
	this.imagen = new Image();
	this.isReady = false;
	var that = this;
	this.imagen.onload = function(){ 
		that.isReady = true;
	}
	this.imagen.src = archivoImg;
	this.rectanguloIzq = rectanguloIzq;
	this.rectanguloDer = rectanguloDer;
	this.radianes = angulo * Math.PI / 180;
	this.pendienteIzq = Math.tan(this.radianes);
	this.bIzq = posY - this.pendienteIzq * posX;
	this.pendienteDer = -Math.tan(this.radianes);
	this.bDer = posY - this.pendienteDer * posX;
	this.posYIni = posY;
	this.estado = estado;
	this.posX = posX;
	
	this.actualizarEstado = function() {
		if (this.estado == ESTADO_DERECHA) {
			this.posX = this.posX + 20;
			this.posY = this.pendienteDer * this.posX + this.bDer;	
		}
		else {				
			this.posX = this.posX - 20;
			this.posY = this.pendienteIzq * this.posX + this.bIzq;
		}		
		if (this.posY >= 400 || this.posY < 0 || this.posX < 0 || this.posX > 800)
			return true; // Eliminar flecha
		return false;
	} 
	
	this.drawImage = function() {
		this.contextoMovimiento.save();
		if (this.estado == ESTADO_IZQUIERDA) {
			this.contextoMovimiento.translate(this.posX, this.posY);
			this.contextoMovimiento.rotate(this.radianes);
			this.contextoMovimiento.drawImage(this.imagen, this.rectanguloIzq.x, this.rectanguloIzq.y, this.rectanguloIzq.ancho, this.rectanguloIzq.alto,0,0,this.rectanguloIzq.ancho, this.rectanguloIzq.alto);
		}
		else {
			this.contextoMovimiento.translate(this.posX, this.posY);
			this.contextoMovimiento.rotate(-this.radianes);
			//this.contextoMovimiento.drawImage(this.imagen,275,128,65,10,0,0,65,10);
			this.contextoMovimiento.drawImage(this.imagen, this.rectanguloDer.x, this.rectanguloDer.y, this.rectanguloDer.ancho, this.rectanguloDer.alto,0,0,this.rectanguloDer.ancho, this.rectanguloDer.alto);
		}
		this.contextoMovimiento.restore();
	}
	
	this.getRectanguloColision = function() {
		if (this.estado == ESTADO_IZQUIERDA)
			return new Rectangulo(this.posX, this.posY, this.rectanguloIzq.ancho/6, this.rectanguloIzq.alto);
		else {
			var posXAux = this.posX + (this.rectanguloDer.ancho-this.rectanguloDer.ancho/5)*Math.cos(this.radianes);
			var posYAux = this.pendienteDer * posXAux + this.bDer;	
			return new Rectangulo(posXAux, posYAux, this.rectanguloDer.ancho/5, this.rectanguloDer.alto);
		} 
	}

	
}